package fiuba.td.fabrica.model.entities;

import fiuba.td.fabrica.model.exceptions.ConectableAveriadoException;
import fiuba.td.fabrica.model.exceptions.ConexionConectableOcupadoException;
import fiuba.td.fabrica.model.exceptions.MaquinaNoCambiaEstadoProductoException;

/**
 * Elementos que son conectados a traves de cintas transportadoras
 */
public interface Conectable {
	
	/**
	 * Conecta a la entrada del Conectable una cinta
	 * @param cintaTransportadora
	 * @throws ConexionConectableOcupadoException
	 */
	public void conectarEntrada (CintaTransportadora cintaTransportadora) 
			throws ConexionConectableOcupadoException;
	
	public void desconectarEntrada ();
	
	public CintaTransportadora getCintaTransportadoraSalida();
	
	public void operar(Producto producto) throws ConectableAveriadoException, MaquinaNoCambiaEstadoProductoException;

	public boolean isIgualModelo (Conectable conectable);
}
